\documentclass[12pt]{article}
\usepackage{a4wide}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{color}
\usepackage{url}
\definecolor{lnk}{rgb}{0,0,0.4}
\usepackage[colorlinks=true,linkcolor=lnk,citecolor=black,urlcolor=black]{hyperref}
\usepackage{./otros/caratula}
\usepackage{amssymb}
\usepackage{pdfpages}
\usepackage{makeidx}

\parskip=1.5pt

\usepackage[small, bf, labelformat = empty]{caption}
\usepackage{subfig}
\usepackage{float}
\restylefloat{table}

\makeindex

\begin{document}

%~ Carátula
\titulo{Taller 3 - Capa de Transporte}
\subtitulo{}
\fecha{27 de Junio de 2012. \\}
\materia{Teor\'ia de las Comunicaciones}
\integrante{Ciraco, Agustina}{630/06}{agusciraco@gmail.com}
\integrante{Heredia Nadia}{589/08}{nheredia@dc.uba.ar}
\maketitle
% Índice
\small
\newpage \printindex \tableofcontents
\normalsize
\newpage

% Descripci\'on de lo que hicimos
%\section{Desarrollo}
% Las preguntas

\section{Introducci\'on}
%~ resumen de lo que se hizo
En este taller se experiment\'o con distintas herramientas y t\'ecnicas
de nivel de transporte. 
%Se utiliz\'o TCP. cri cri cri
Se estudia el comportamiento de los hosts, teniendo en cuenta el estado 
de los puertos y los servicios ofrecidos.

\section{Primera parte: port scanning}

\noindent
Para esta parte, se realizaron dos implementaciones de port scanning, 
una en la que no se establece una conexi\'on, y otra en la que s\'i.


\paragraph{¿Cuál es la complejidad algorítmica de estos métodos?
Comparar tiempo contra cantidad de operaciones.} 
%$ $ \newline
\begin{itemize}
	%\item[Port Scan] $ $ \\
	\item 	\emph{Port Scan}
			\begin{itemize}
				\item Cantidad de Operaciones $ $ \\
						Manda dos veces un paquete por cada puerto en rango. Despues se analiza
						la respuesta y se decide el estado del puerto.
				\item Tiempo $ $ \\
						El tiempo depende de cu\'anto se tarda en obtener una respuesta. Se debe tener en cuenta 
						que el tiempo de espera de una respuesta esta determinado por un timeout, ya que en el caso
						en el que se intentase conectar con un host que posea un firewall o estuviese caido, no se 
						va a recibir ninguna respuesta y esto podr\'ia dejar al algoritmo esperando indefinidamente.
			\end{itemize}
			
	%\item[Connect Scan] $ $ \\
	\item	\emph{Connect Scan}
			\begin{itemize}
				\item Cantidad de Operaciones $ $ \\
						Es igual a port scan si la respuesta no contiene los flags SA.
						Si los contiene, entonces se termina el three way handshake, enviando un paquete mas.
						Por lo tanto tiene m\'as cantidad de operaciones que en port scan.				
				\item Tiempo $ $ \\
						Al igual que antes, el tiempo depende de la respuesta, pero como se vio en el item 
						anterior, se deber\'a esperar una respuesta m\'as en el caso en el que se complete el 
						three way handshake para iniciar la conversaci\'on. Al igual que port\_scan posee un 
						timeout para que no se quede esperando indefinidamente. 
			\end{itemize}
			
\end{itemize}




\paragraph{Discutir sobre cuán inocuos resultan estos métodos.}
$ $ \newline
Port scan envia un solo paquete que puede ser dificil de detectar,
ya que no posee ninguna particularidad. Adem\'as, no se llega a realizar
la conexi\'on al puerto, con lo cual no bloquea el puerto, es por ello que 
puede considerarse un m\'etodo no inocuo.
En cambio, connect scan, seg\'un como se considere el conectarse a un puerto, 
puede llegar a considerarse inocuo, ya que un posible ataque a realizar es
conectarse a todos los puertos que tenga abiertos y dejarlos bloqueados.
Adem\'as podr\'ia detectarse esta ocupaci\'on del puerto.

\paragraph{¿Es posible tomar conciencia de que una detección de puertos
está siendo rea-lizada?} $ $ \newline
Pueden detectarse ciertas cosas que identifican a trafico sospechoso.
Es sospechoso por ejemplo que un mismo host mande trafico a varios
puertos en un tiempo corto, evidenciando un posible port scan.
Tambi\'en si se mandan paquetes con el flag SYN a puertos que no estan abiertos, o
que estan bloqueados, tambi\'en existe la posibilidad de que se est\'e 
realizando un port scan. 
En particular en el caso de connect scan si el usuario desea utilizar un puerto que asume
libre y resulta estar conectado, puede sospechar del otro lado de la conexi\'on.


\paragraph{¿En qué escenarios son efectivos? ¿En cuáles carecen de
utilidad?} $ $ \newline
En los escenarios en donde no hay firewall, ni ning\'un tipo de 
filtrado de las conexiones entrantes. ya que de esta manera, los 
puertos que poseen un proceso entrante, van a proceder a enviar una 
respuesta.


\paragraph{Considerar el siguiente escenario: se desconoce la existencia
de un firewall intermedio. ¿Qué se podría determinar con esta técnica?}
$ $ \newline
Al intentar escanear los puertos de dicha ip, lo que va a suceder es 
que ninguno va a responder, ya que los paquetes solicitando una 
conexi\'on van a ser filtrados y eliminados por el firewall. 
Lo que se va a poder determinar es la presencia del firewall.


\newpage
\section{Segunda parte: service discovery}

\paragraph{Definir e implementar una estrategia para descubrir qué
servicio corresponde a un puerto abierto.} $ $ \newline
Se implement\'o una estrategia que tiene en cuenta el mapeo standard
existente entre puertos y servicios. Este mapeo se encuentra publicado 
en internet, as\'i como tambi\'en en un archivo en las distribuciones 
de linux, ubicado en \texttt{/etc/services}. 
En este caso, se utiliz\'o del m\'odulo \texttt{socket} de python, 
la funci\'on \textbf{getservbyport}; que, dado un n\'umero de puerto, 
devuelve el nombre del servicio asociado por default. En caso de no 
existir dicho servicio da error. Se tuvo en cuenta este caso de error 
al momento de implementar.

\paragraph{¿En qué casos es efectiva?} $ $ \newline
La t\'ecnica implementada es efectiva en aquellos casos en los que los
servicios no fueron remapeados, es decir que sigan utilizando el puerto
que tienen asignado por default.
Esto no siempre ocurre, pero es el caso m\'as com\'un. 

% Esto no sé si es posta, así que va comentado
\noindent Implementar 
service discovery para el caso m\'as general es m\'as complicado ya 
que habr\'ia que inferir el servicio de un puerto dado a partir de su 
comportamiento, lo cual no es sencillo.


\newpage
\section{Tercera parte: detecci\'on de versi\'on}
%Banner Grabbing.
\noindent
Para esta parte, lo que se hizo fue utilizar nuevamente funciones del 
m\'odulo \texttt{socket}, esta vez para establecer una conexi\'on con 
usando la p\'agina y el puerto pasados por par\'ametros. Se us\'o un 
socket para esto. Luego, se envi\'o un pedido de HTTP de tipo HEAD, 
obteniendo una respuesta, que es el banner buscado.

 
\paragraph{Documentar al menos tres servicios susceptibles a la
técnica de banner grabbing y dar una implementación para la captura
de dicho banner.} 

\begin{itemize}
    \item   \emph{HTTP} es un protocolo de aplicaci\'on que se usa 
				en las transacciones de WWW. Es orientado a conexion, 
				y usa el esquema reply-request. 
    \item   \emph{FTP} es un protocolo de red usado para la 
				transferencia de archivos entre hosts sobre una red que 
				utiliza TCP. Se basa en una arquitectura cliente-servidor.
    \item   \emph{SMTP} es un protocolo de aplicaci\'on que establece 
				el standard para la transmisi\'on de e-mails.
\end{itemize}

%No sé si nos necesariamente los que están  en esta lista.
%The command above can be used to identify and check what processes is using any other ports too, such as 7 (Echo), 21 (FTP), 23 (Telnet), 25 (SMTP), 53 (DNS), 70 (Gopher), 79 (Finger), 107 (RTelnet), 110 (POP3), 119 (NNTP), 139 (NetBIOS), 143 (IMAP), 194 (IRC), 3128, 8080, 10000, and etc.

\end{document}






















